
local plot = require "Q2DViewerEx"

--==============================================================================================================--
--初始化参数
local view={
     console = false;
     view2Ds = {};
     init_str = [[
function init(self)
	 self.view.xAxis:setProperty( {name="频率 [GHz]"} )
	 self.view.yAxis:setProperty( {name="Fields [V/m]"} )
	 self.view:rescaleAxes();
end
     ]];     
     get_settings_str = Gallop.get_settings_str;
     set_settings_str = Gallop.set_settings_str;     
};
--==============================================================================================================--

--==============================================================================================================--
--创建表和创建元表
function view:new (o)
	o = o or {};
	self.__index = self;
	setmetatable(o,self)
	return o;
end
--==============================================================================================================--

--==============================================================================================================--
--3D视图操作
function view:perspective_view ()
	if self.console == false then
		local QGallop = require"QGMainWindow"
		require "Q3DViewer"
		if QGallop~=nil and QGallop.getMainWindow then
			local mw = QGallop.getMainWindow();
			if mw~=nil then
				local view = mw:get3DView();
				if view~=nil then
					view:showEntireScene();
					view:perspective();
				end
			end
		end
	end
end
--==============================================================================================================--

--==============================================================================================================--
--3D视图操作
function view:get3DView ()
	if self.console == false then
		local QGallop = require"QGMainWindow"
		require "Q3DViewer"
		if QGallop~=nil and QGallop.getMainWindow then
			local mw = QGallop.getMainWindow();
			if mw~=nil then
				local v = mw:get3DView();
				if v~=nil then
					return v;
				end
			end
		end
	end
end
--==============================================================================================================--

--==============================================================================================================--
--3D视图操作
function view:refresh_view3D()
	local v = self:get3DView();
	if v~=nil then
		v:refresh();
	end
end
--==============================================================================================================--

--==============================================================================================================--
--创建2DView
function view:create_view2D(name)
	--print(self.console)
	uname = name or 'View2D';
	if self.console~=true then
		local gallop = require "QGMainWindow"
		self.mw = gallop.getMainWindow();
		uname = self:get_name(uname);
		self.view = self.mw:create2DView(uname);
		self.view2Ds[uname]=self.view;
	else
		self.view = plot:create2DView(800,600);
	end
	return self.view,uname;
end
--==============================================================================================================--

--==============================================================================================================--
--创建2DView
function view:get_name(name)
	name = name or 'View2D';
	uname = name;
	a = 1;
	while self.view2Ds[uname] ~= nil
	do
		uname = name .. a;
		a = a+1;
	end
	return uname;
end
--==============================================================================================================--

--==============================================================================================================--
--选中2DView
function view:select_view(name)
	if self.console~=true then
		local gallop = require "QGMainWindow"
		self.mw = gallop.getMainWindow();
		local view = self.view2Ds[name];
		assert(self.mw:hasView(view)==true,"The view is not a 2D viewer!")
		self.view = view;
	end
	return self.view;
end
--==============================================================================================================--

--==============================================================================================================--
--选中2DView
function view:get_view2D_list(list)
	list:clear ();
	--print(#self.view2Ds);
	if self.console~=true then
		local gallop = require "QGMainWindow"
		self.mw = gallop.getMainWindow();
		for k,v in pairs (self.view2Ds) do 
			if self.mw:hasView(v)~=true then self.view2Ds[k] = nil; end
		end
		for k,v in pairs (self.view2Ds) do 
			list:add(k);
		end
	end
end
--==============================================================================================================--

----------------------------------------------------------------------------------------------------------------------------------------
--画图
function view:plot2D (data, valid, strs)
	if Gallop.View:has_view(self.view) == false then self:create_view2D(); end;
	self.view:addGraphs(data,valid,strs);
	self.view:rescaleAxes();
end
----------------------------------------------------------------------------------------------------------------------------------------

--==============================================================================================================--
--选中2DView
function view:has_view(view)
	if self.console~=true then
		local gallop = require "QGMainWindow"
		self.mw = gallop.getMainWindow();
		return self.mw:hasView(view);
	end
	return false;
end
--==============================================================================================================--

--==============================================================================================================--
--选中2D激活的View
function view:select_active_view()
	if self.console~=true then
		local gallop = require "QGMainWindow"
		self.mw = gallop.getMainWindow();
		local view = self.mw:activeViewer2DChild();
		assert(self.mw:hasView(view)==true,"The active view is not a 2D viewer!")
		self.view = view;
	end
	return self.veiw;
end
--==============================================================================================================--

--==============================================================================================================--
--初始化2DView
function view:init_view2D()
	self:select_active_view();
	self:init_freq_spectrum_plot();
end
--==============================================================================================================--

--==============================================================================================================--
--初始化2DView为频谱
function view:init_2dplot(xStr,yStr)
	 self.view.xAxis:setProperty( {name=xStr} )
	 self.view.yAxis:setProperty( {name=yStr} )
	 self.view:rescaleAxes();
end
--==============================================================================================================--

--==============================================================================================================--
--初始化2DView为频谱
function view:set_plot_lable(view,xStr,yStr)
	 view.xAxis:setProperty( {name=xStr} )
	 view.yAxis:setProperty( {name=yStr} )
	 view:rescaleAxes();
end
--==============================================================================================================--

--==============================================================================================================--
--
function view:init_freq_spectrum_plot(xStr,yStr)
	self:init_2dplot(xStr or '频率 [GHz]', yStr or 'Fields [V/m]');
end
--==============================================================================================================--

--==============================================================================================================--
function view:init_angle_theta_spectrum_plot()
	self:init_2dplot(xStr or '俯仰角方位角 θ [°]', yStr or 'Fields [V/m]');
end
--==============================================================================================================--

--==============================================================================================================--
function view:init_angle_phi_spectrum_plot()
	self:init_2dplot(xStr or '方位角 θ [°]', yStr or 'Fields [V/m]');
end
--==============================================================================================================--


return view;